package br.ucb.indica.DAO;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import br.ucb.indica.enumerador.Cargo;
import br.ucb.indica.negocio.PessoaBean;

public class PessoaDAO {
	private Connection con;
	MessageDigest md = null;
	
	public PessoaDAO() throws SQLException, NoSuchAlgorithmException {
		this.con = ConnectionFactory.getConnection();
		this.md = MessageDigest.getInstance("MD5");
	}
	
	public int incluir(PessoaBean pessoa) throws SQLException, NoSuchAlgorithmException {
		if (pessoa == null) {
			return 0;
		}
		
		PessoaBean p = new PessoaBean();
		
		PreparedStatement stmt = con.prepareStatement("INSERT INTO pessoa (nome_pessoa, sexo_pessoa, login_pessoa, senha_pessoa, cargo_pessoa) values (?, ?, ?, ?, ?)");
		stmt.setString(1, pessoa.getNome());
		stmt.setString(2, pessoa.getSexo());
		stmt.setString(3, pessoa.getLogin());
		
//		String senhaComCriptografia = new String(md.digest(pessoa.getSenha().getBytes()));
//		stmt.setString(4, senhaComCriptografia);
		
		stmt.setString(4, pessoa.getSenha());
		stmt.setString(5, pessoa.getCargo().toString());
		int retorno = stmt.executeUpdate();
		stmt.close();
		return retorno;
		//return p;
		
	}


	public PessoaBean consultar(Long id) throws SQLException {
		PreparedStatement stmt = this.con.prepareStatement("SELECT * FROM pessoa WHERE id_pessoa=?");
		stmt.setLong(1, id);
		ResultSet rs = stmt.executeQuery();
		PessoaBean pessoa = null;
		if (rs.next()) {
			pessoa = new PessoaBean();
			pessoa.setId(rs.getLong("id_pessoa"));
			pessoa.setNome(rs.getString("nome_pessoa"));
			pessoa.setSexo(rs.getString("sexo_pessoa"));
		    pessoa.setCargo(Cargo.valueOf(rs.getString("cargo_pessoa")));
		}
		rs.close();
		stmt.close();
		return pessoa;	
	}
	
	
	public List<PessoaBean> listar() throws SQLException {
		PreparedStatement stmt = this.con.prepareStatement("SELECT * FROM pessoa");
		ResultSet rs = stmt.executeQuery();
	    List<PessoaBean> pessoas = new ArrayList<PessoaBean>();
	    while (rs.next()) {
		    PessoaBean pessoa = new PessoaBean();
		    pessoa.setId(rs.getLong("id_pessoa"));
		    pessoa.setNome(rs.getString("nome_pessoa"));
		    pessoa.setSexo(rs.getString("sexo_pessoa"));
		    pessoa.setLogin(rs.getString("login_pessoa"));
		    pessoa.setSenha(rs.getString("senha_pessoa"));
		    pessoa.setCargo(Cargo.valueOf(rs.getString("cargo_pessoa")));
		    pessoas.add(pessoa);
		}
		rs.close();
		stmt.close();
		return pessoas;	
	}

	
	public int alterar(PessoaBean pessoa) throws SQLException {
		if (pessoa == null) return 0;
		PreparedStatement stmt = this.con.prepareStatement("UPDATE pessoa SET nome_pessoa=?, sexo_pessoa=?, login_pessoa=?, senha_pessoa=?, cargo_pessoa=? WHERE id_pessoa=?");
		stmt.setString(1, pessoa.getNome());
		stmt.setString(2, pessoa.getSexo());
		stmt.setString(3, pessoa.getLogin());
		stmt.setString(4, pessoa.getSenha());
		stmt.setString(5, (pessoa.getCargo()).toString());
		stmt.setLong(6, pessoa.getId());
		int retorno = stmt.executeUpdate();
		stmt.close();
		return retorno;
	}

	
	public int excluir(PessoaBean pessoa) throws SQLException {
		if (pessoa == null) return 0;
		PreparedStatement stmt = this.con.prepareStatement("DELETE FROM pessoa WHERE id_pessoa=?");
		stmt.setLong(1, pessoa.getId());
		int retorno = stmt.executeUpdate();
		stmt.close();
		return retorno;
	}
	
	public PessoaBean logar(PessoaBean pessoa) throws SQLException {
		if (pessoa == null) {
			return null;
		} 
		
		PessoaBean p = new PessoaBean();
		
		PreparedStatement stmt = this.con.prepareStatement("SELECT * FROM pessoa where login_pessoa=? and senha_pessoa=?");
		stmt.setString(1, pessoa.getLogin());  
		stmt.setString(2, pessoa.getSenha());  
		ResultSet rs = stmt.executeQuery();
		
		if(rs.next()){
			p.setId(rs.getLong("id_pessoa"));
			p.setNome(rs.getString("nome_pessoa"));
			p.setSexo(rs.getString("sexo_pessoa"));
			p.setLogin(rs.getString("login_pessoa"));
			p.setCargo(Cargo.get(rs.getString("cargo_pessoa")));
			return p;
		} else {  
			return null;  
		}
			
	}

}
